package geor.view;

import java.util.Calendar;
import java.util.GregorianCalendar;

import geor.app.R;
import geor.model.CompraHelper;
import android.content.ContentValues;
import android.database.SQLException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import lib.util.DateTimeUtils;
import lib.view.FullActivity;

public class SalvarCompraPrazoActivity extends FullActivity {

	private Button btSalvar = null;
	private EditText etValor = null;
	private EditText etDescricao = null;
	private EditText etNumeroVezes = null;
	private EditText etDiaPagamento = null;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.salvar_compra_prazo);

		helper = new CompraHelper(this);
		load();
		set();
	}

	@Override
	public void createOrUpdate(ContentValues values) {
		boolean continuaAplicacao = false;
		GregorianCalendar cal = new GregorianCalendar();
		if (validate(values)) {
			try {
				helper.getDatabase().beginTransaction();
				long id = helper.create(values);

				int numVezes = values.getAsInteger("num_vezes");
				cal.set(GregorianCalendar.DAY_OF_MONTH,
						values.getAsInteger("dia_pagamento"));
				for (int i = 1; i <= numVezes; i++) {
					cal.add(Calendar.MONTH, 1);
					helper.getWritableDatabase().execSQL(
							"INSERT INTO contas_pagar_parcela (_id,  contas_pagar_id,vencimento) "
									+ "values (?,?,?)",
							new String[] {
									String.valueOf(i),
									String.valueOf(id),
									DateTimeUtils.formatDate(cal.getTime(),
											"yyyy-MM-dd") });
				}

				helper.getDatabase().setTransactionSuccessful();
				continuaAplicacao = true;
			} catch (SQLException e) {
				Log.e("SalvarCompraVistaActivity", e.getMessage());
				show("Ocorreu um erro ao salvar os dados.");
			} finally {
				helper.getDatabase().endTransaction();
			}
		}
		if (continuaAplicacao) {
			finish();
		}
	}

	@Override
	public boolean delete(String id) {
		return false;
	}

	@Override
	public boolean validate(ContentValues values) {
		if (values.getAsString("valor").length() == 0
				|| values.getAsString("descricao").length() == 0
				|| values.getAsString("num_vezes").length() == 0
				|| values.getAsString("dia_pagamento").length() == 0) {
			show("Todos os campos são de preenchimento obrigatório!");
			return false;
		}
		if (values.getAsDouble("valor") == 0) {
			show("O valor não pode ser zero");
			return false;
		}
		if (values.getAsDouble("num_vezes") == 0) {
			show("O numero de vezes não pode ser zero");
			return false;
		}
		if (values.getAsDouble("num_vezes") > 200) {
			show("O numero de vezes excedeu o limite permitido(200).");
			return false;
		}
		if (values.getAsDouble("dia_pagamento") <= 0
				|| values.getAsDouble("dia_pagamento") >= 32) {
			show("O dia do pagamento inserido não é válido");
			return false;
		}
		return true;
	}

	@Override
	public void load() {
		etValor = (EditText) findViewById(R.id.etValor);
		etDescricao = (EditText) findViewById(R.id.etDescricao);
		etDiaPagamento = (EditText) findViewById(R.id.etDiaPagamento);
		etNumeroVezes = (EditText) findViewById(R.id.etNumeroVezes);
		btSalvar = (Button) findViewById(R.id.btSalvar);
	}

	@Override
	public void set() {

		btSalvar.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				ContentValues values = new ContentValues();
				values.put("valor", etValor.getText().toString());
				values.put("descricao", etDescricao.getText().toString());
				values.put("num_vezes", etNumeroVezes.getText().toString());
				values.put("dia_pagamento", etDiaPagamento.getText().toString());
				createOrUpdate(values);
			}
		});
	}

	@Override
	public void populate(ContentValues values) {
	}

}
